home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / comm2 / mmmntc20.lha / MM / Rexx / MM_MaintCfg.rexx < prev    next >
OS/2 REXX Batch file  |  1996-04-26  |  7KB  |  401 lines

  1. /*
  2.  
  3.                     $VER: MM_MaintCfg.rexx 0.20  (26.04.96)
  4.  
  5.                            (C) 1995/96 Robert Hofmann
  6.  
  7. */
  8.  
  9. parse arg args
  10.  
  11. options cache
  12. options failat 99
  13. options results
  14.  
  15. signal on break_c
  16. signal on break_d
  17. signal on break_e
  18. signal on break_f
  19. signal on halt
  20. signal on ioerr
  21. signal on syntax
  22.  
  23. address 'MAILMANAGER'
  24.  
  25.  
  26. Main:
  27.  
  28.     call Init
  29.     call Header
  30.     call Parse_Args(args)
  31.     call Maint_Cfgs
  32.  
  33. call Quit(0, 'All done.')
  34. exit
  35.  
  36.  
  37. break_c:; break_d:; break_e:; break_f:; halt:
  38.  
  39.     signal off break_c
  40.     signal off break_d
  41.     signal off break_e
  42.     signal off break_f
  43.     signal off halt
  44.  
  45.     return_code        =    5
  46.     error_line    = 0
  47.     error_msg            = 'Execution halted!!!'
  48.     rc                        = 0
  49. signal Exit
  50.  
  51.  
  52. Command: procedure Expose system.
  53.  
  54.     parse arg cmd
  55.  
  56.     address command cmd
  57.  
  58.     if rc>5 then call Log('*** WARNING: Command "'cmd'" returned' rc'.')
  59. return rc
  60.  
  61.  
  62. Exit:
  63.  
  64.     select
  65.         when return_code>=40 then error = 'INTERNAL-ERROR:'
  66.         when return_code>=30 then error = 'IO-ERROR:'
  67.         when return_code>=20 then error = 'ERROR:'
  68.         when return_code>=10 then error = 'WARNING:'
  69.         when return_code>=5  then error = 'INFO:'
  70.         otherwise                                    error = ''
  71.     end
  72.  
  73.   call Log()
  74.     call Log('***' strip(error error_msg) '***', '+')
  75.     call Log(,'\')
  76.  
  77.     call setclip('MM_LogPre', system.mm.logpre)
  78.  
  79. exit return_code
  80.  
  81.  
  82. Get_Arg: procedure Expose args system.
  83.  
  84.   arg keyword, mode, old
  85.  
  86.     uargs    = upper(args)
  87.     p            = find(uargs, keyword)
  88.  
  89.     if p=0    then
  90.         do
  91.             p = pos(' 'keyword'=', ' 'uargs)
  92.  
  93.             if p>0 then    args    = overlay(' ', args, p+length(keyword))
  94.  
  95.       p = find(upper(args), keyword)
  96.         end
  97.  
  98.     system.cmdopt.keyword    = p>0
  99.  
  100.     select
  101.         when mode=0    then
  102.             if p>0 then
  103.                 do
  104.                     ret        = 1
  105.                     args    = delword(args, p, 1)
  106.                 end
  107.             else ret    = old
  108.  
  109.         when mode=1 then
  110.             if p>0 then
  111.                 do
  112.                     left    = subword(args, 1, p-1)
  113.                     rest    = subword(args, p+1)
  114.  
  115.                     if left(rest, 1)='"' then    parse var rest . '"'    ret '"'    rest
  116.                     else                                            parse var rest                ret            rest
  117.  
  118.                     args    = strip(left strip(rest))
  119.                 end
  120.             else ret    = old
  121.  
  122.         when mode=2 then
  123.             do
  124.                 if left(args, 1)='"'    then    parse var args . '"'    ret '"'    args
  125.                 else                                                parse var args                ret         args
  126.  
  127.                 if strip(ret)=''            then    ret = old
  128.             end
  129.  
  130.         otherwise exit 99
  131.     end
  132.  
  133.     args    = strip(args)
  134.     ret        = strip(ret, 'b', '" ')
  135.  
  136. return ret
  137.  
  138.  
  139. Get_Version: procedure
  140.  
  141.     parse arg mode
  142.  
  143.     parse value sourceline(3-mode) with . . ver .
  144.     parse var ver tst 'ß' .
  145.  
  146.     if ~datatype(strip(tst, 'b', '/ce '), 'N') then
  147.         if ~mode then ver = Get_Version(1)
  148.         else exit 99
  149.  
  150. return ver
  151.  
  152.  
  153. Header:
  154.  
  155.     call Log(,'/')
  156.     call Log('***' system.prg.id '***', '+')
  157.     call Log(' 'system.prg.cr)
  158.     call Log()
  159.  
  160. return
  161.  
  162.  
  163. Include_Lib: procedure
  164.  
  165.     parse arg lib, prio
  166.     if right(upper(lib), 8)~='.LIBRARY' then lib=lib'.library'
  167.     if prio='' then prio=0
  168.  
  169.     if ~show('l', lib) then
  170.         if ~addlib(lib, prio, -30, 0) then
  171.             do
  172.                 say '*** ERROR: Could not open' lib'!!! ***'
  173.                 exit 10
  174.             end
  175. return
  176.  
  177.  
  178. Init:
  179.  
  180.     system.                        = 0
  181.  
  182.     MM_GetTaskPri                'system.taskpri'
  183.     call                                pragma('p', system.taskpri)
  184.  
  185.   system.prg.name        = 'MM_MaintCfg'
  186.     system.prg.ver        = Get_Version(0)
  187.     system.prg.id            = system.prg.name 'v'system.prg.ver
  188.     system.prg.cr            = '(C) 1995/96 Robert Hofmann'
  189.     system.tmpfile        = 'T:'system.prg.name'.tmp'
  190.     system.mm.logpre  = getclip('MM_LogPre')
  191.     system.prg.logpre = system.mm.logpre'|'
  192.     call                   setclip('MM_LogPre', system.prg.logpre)
  193.     system.cmdopts        = 'CFG/K,MAXBACKUP/K/N'
  194.  
  195.     MM_GetCfgPaths            'system.mm'
  196.     MM_Version                    'system.mm'
  197.  
  198.     call Include_Lib('rexxsupport')
  199. return
  200.  
  201.  
  202. IOerr:
  203.  
  204.     signal off ioerr
  205.  
  206.     return_code        = 20
  207.     error_line    = sigl
  208.     error_msg            = 'IO-error' rc 'at line' sigl '['errortext(rc)']')
  209.     rc                        = 0
  210. signal Exit
  211.  
  212.  
  213. Log: procedure Expose system.
  214.  
  215.     parse arg text, pre
  216.  
  217.     tmp        = word('PRG MM', (pre~='')+1)
  218.     text    = system.tmp.logpre || pre' 'text
  219.  
  220.     MM_WriteLog 'text' '2'
  221. return
  222.  
  223.  
  224. Maint_Cfgs: procedure Expose system.
  225.  
  226.     if ~exists(system.arg.cfg) then
  227.         do
  228.             call Log('*** ERROR: Unable to locate' system.arg.cfg'!!!')
  229.             return
  230.         end
  231.  
  232.     config    = system.arg.cfg
  233.  
  234.     call Log(' CFG =' config', MAXBACKUP =' system.arg.maxbackup)
  235.  
  236.     call Command('c:list >'system.tmpfile config',#? lformat "%p%n"')
  237.     MM_ReadStem system.tmpfile 'tmp'
  238.     call delete(system.tmpfile)
  239.  
  240.     tmp2.        = 0
  241.  
  242.     do n=0 to tmp.count-1
  243.         parse var tmp.n . ',' nr
  244.         tmp2.nr            = config','nr
  245.         tmp2.count    = max(tmp2.count, nr)
  246.     end
  247.  
  248.     backup.    = 0
  249.     cnt            = 0
  250.  
  251.     do n=1 to tmp2.count
  252.         if tmp2.n=0 then iterate
  253.  
  254.         backup.cnt    = tmp2.n
  255.         cnt                    = cnt+1
  256.     end
  257.  
  258.     backup.count    = cnt
  259.     maxnr                    = cnt-1
  260.     drop                        tmp. tmp2.
  261.  
  262.     call Log(' Found' backup.count 'backup-configs')
  263.  
  264.     if backup.count>system.arg.maxbackup then
  265.         do
  266.             do n=1 to system.arg.maxbackup
  267.                 new    = config','n
  268.                 nr    = maxnr-system.arg.maxbackup+n
  269.                 old    = backup.nr
  270.  
  271.                 call Log(' Moving' old '->' new'...')
  272.  
  273.                 call delete(new)
  274.                 call rename(old, new)
  275.             end
  276.  
  277.             do n=system.arg.maxbackup+1 to maxnr-system.arg.maxbackup+1
  278.                 call Log(' Deleting' system.arg.cfg','n'...')
  279.                 call delete(system.arg.cfg','n)
  280.             end
  281.         end
  282.     else call Log(' Nothing to do...')
  283.  
  284. return
  285.  
  286.  
  287. Parse_Args: procedure Expose system.
  288.  
  289.     parse arg args
  290.  
  291.     tpl        = system.cmdopts',?/S,'
  292.     args    = translate(args, '  ', '9'x'=')
  293.  
  294.     pk        = pos('/K', tpl)
  295.     ps        = pos('/S', tpl)
  296.  
  297.     select
  298.         when pk=0    & ps=0    then    p    = 0
  299.         when pk=0 & ps>0    then  p    = ps
  300.         when ps=0 & pk>0    then    p    = pk
  301.         otherwise                                p    = min(pk, ps)
  302.     end
  303.  
  304.     p            = lastpos(',', left(tpl, p))
  305.     tpl        = substr(tpl',', p+1) || left(tpl, max(p-1, 0))
  306.  
  307.     do while tpl~=''
  308.         parse var tpl template ',' tpl
  309.         parse var template keyword '/' .
  310.  
  311.         bool    = pos('/S',    template)>0
  312.         key        = pos('/K', template)>0
  313.         must    = pos('/A', template)>0
  314.         num        = pos('/N', template)>0
  315.  
  316.         select
  317.             when must then        system.arg.keyword    = '0'x
  318.             when bool    then        system.arg.keyword    = 0
  319.             when num    then        system.arg.keyword    = 0
  320.  
  321.             otherwise                    system.arg.keyword    = ''
  322.         end
  323.  
  324.         if bool | key    then    mode    = ~bool
  325.         else                                mode    = 2
  326.  
  327.         system.arg.keyword    = Get_Arg(keyword, mode, system.arg.keyword)
  328.  
  329.         if keyword='?' & system.arg.keyword=1 then leave
  330.  
  331.         if must & system.arg.keyword='0'x then
  332.             do
  333.                 tmp    = template 'missing!!!'
  334.  
  335.                 say
  336.                 say ' ***' tmp '***'
  337.  
  338.                 signal Usage
  339.             end
  340.  
  341.         if num & ~datatype(system.arg.keyword, 'N') then
  342.             if ~must & system.arg.keyword='' then    system.arg.keyword    = 0
  343.             else
  344.                 do
  345.                     tmp    = 'Numeric value expected for' template', but is "'system.arg.keyword'"!!!'
  346.  
  347.                     say
  348.                     say ' ***' tmp '***'
  349.  
  350.                     signal Usage
  351.                 end
  352.     end
  353.  
  354.     tmp    = '?'; if system.arg.tmp then signal Usage
  355.  
  356.     if args~='' then call Quit(10, 'Unknown option(s):' args)
  357.  
  358.  
  359.     if system.arg.cfg=''                then
  360.         if system.mm.release<429    then    system.arg.cfg                = 'MM:Config/MailManager.cfg'
  361.         else                                                        system.arg.cfg                = system.mm.cfgfile
  362.  
  363.     if system.arg.maxbackup<=0    then    system.arg.maxbackup    = 5
  364.  
  365. return
  366.  
  367.  
  368. Quit:
  369.  
  370.     parse arg return_code, error_msg
  371.  
  372.     error_line    = 0
  373.     rc                        = 0
  374. signal Exit
  375.  
  376.  
  377. Syntax:
  378.  
  379.     signal off syntax
  380.  
  381.     return_code        = 40
  382.     error_line    = sigl
  383.     error_msg            = 'Syntax-error' rc 'at line' sigl '['errortext(rc)']'
  384.     rc                        = 0
  385. signal Exit
  386.  
  387.  
  388. Usage:
  389.  
  390.     rx.            = ''
  391.     rx.0.0    = '[rx] '
  392.     rx.0.1    = '[.rexx]'
  393.     m                =    pos('/e', system.prg.ver)>0
  394.     tmp            = rx.m.0 || system.prg.name || rx.m.1
  395.  
  396.     say
  397.     say 'Usage:' tmp system.cmdopts
  398.     say
  399. call Quit(0, 'Usage requested.')
  400.  
  401.